package cn.virens.common.project.base.utils;

import ch.hsr.geohash.GeoHash;
import cn.virens.common.util.exception.APIException;
import org.dromara.hutool.core.text.StrUtil;

public class GeoHashUtil {

    /**
     * 生成GeoHash(精度12)
     *
     * @param latitude  纬度
     * @param longitude 经度
     */
    public static String geohash(Double latitude, Double longitude) throws APIException {
        return geohash(latitude != null ? latitude : 0, longitude != null ? longitude : 0, 12);
    }

    /**
     * 生成GeoHash(精度12,LIKE查询)
     *
     * @param latitude  纬度
     * @param longitude 经度
     */
    public static String geohashLike(double latitude, double longitude) throws APIException {
        return StrUtil.addSuffixIfNot(geohash(latitude, longitude), "%");
    }

    /**
     * 生成GeoHash
     *
     * @param latitude           纬度
     * @param longitude          经度
     * @param numberOfCharacters 精度:1-12
     */
    public static String geohash(double latitude, double longitude, int numberOfCharacters) throws APIException {
        return GeoHash.withCharacterPrecision(latitude, longitude, numberOfCharacters).toBase32();
    }

    /**
     * 生成GeoHash(LIKE查询)
     *
     * @param latitude           纬度
     * @param longitude          经度
     * @param numberOfCharacters 精度:1-12
     */
    public static String geohashLike(double latitude, double longitude, int numberOfCharacters) throws APIException {
        return StrUtil.addSuffixIfNot(geohash(latitude, longitude, numberOfCharacters), "%");
    }
}
